package com.mobilezu.mobile.android.mobile4s.util;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import android.content.Context;
import android.content.res.AssetManager;
import android.util.Log;


public class FileUtil {
	private Context context;

	public FileUtil(Context context) {
		this.context = context;
	}

	/**
	 * 复制文件,存在则删除
	 * 
	 * @param SourceFilePathName
	 *            assets文件夹下的相对路径
	 * @param DestPath
	 *            目标文件夹的绝对路径
	 * @param FileName
	 * @return
	 */
	public boolean copyFileFromAsset(String sourceFilePathName,
			String destPath, String fileName) {
		boolean result = true;
		try {
			File dir = new File(destPath);
			if (!dir.exists()) {
				result = dir.mkdirs();
				Log.i("File Util Create Dir", result + "");
			}
			File toFile = (new File(destPath + "/" + fileName));
			if (toFile.exists()) {
				toFile.delete();
			}
			// 获得数据库文件的InputStream对象
			AssetManager assets = context.getAssets();
			InputStream file = assets.open(sourceFilePathName);
			// FileOutputStream a=new FileOutputStream(ToFile);
			FileOutputStream fos = new FileOutputStream(destPath + "/"
					+ fileName);
			byte[] buffer = new byte[8192];
			int count = 0;
			// 开始复制FILENAME文件
			while ((count = file.read(buffer)) > 0) {
				fos.write(buffer, 0, count);
			}
			fos.close();
			file.close();
			result = true;
			Log.i(this.getClass().getName(), "拷贝文件成功："+fileName);
		} catch (IOException e) {
			CommonHelper.log(this.getClass().getName(), "拷贝文件失败："+fileName);
			result = false;
		}
		return result;
	}

	/**
	 * 从源文件夹复制文件到目标文件夹
	 * 
	 * @param SourceFilePathName
	 *            源文件夹
	 * @param DestPath
	 *            目标文件夹
	 * @param FileName
	 *            文件名
	 * @return
	 */
	public boolean copyFileFromTo(String sourceFilePathName, String destPath,
			String fileName) {
		try {
			File dir = new File(destPath);
			if (!dir.exists()) {
				dir.mkdir();
			}
			File ToFile = (new File(destPath + "/" + fileName));
			if (ToFile.exists()) {
				ToFile.delete();
			}
			// 获得数据库文件的InputStream对象
			InputStream file = new FileInputStream(sourceFilePathName);
			FileOutputStream fos = new FileOutputStream(destPath + "/"
					+ fileName);
			byte[] buffer = new byte[8192];
			int count = 0;
			// 开始复制FILENAME文件
			while ((count = file.read(buffer)) > 0) {
				fos.write(buffer, 0, count);
			}
			fos.close();
			file.close();
			return true;

		} catch (IOException e) {
			CommonHelper.log(this.getClass().getName(),"copyFileFromTo："+e.toString());
			return false;
		}
	}

	/**
	 * 删除文件
	 * 
	 * @param fileName
	 * @return
	 */
	public boolean delete(String fileName) {
		File file = new File(fileName);
		if (!file.exists()) {
			System.out.println("删除文件失败：" + fileName + "文件不存在");
			return false;
		} else {
			if (file.isFile()) {

				return deleteFile(fileName);
			} else {
				return deleteDirectory(fileName);
			}
		}
	}

	/**
	 * 删除单个文件
	 * 
	 * @param fileName
	 *            被删除文件的文件名
	 * @return 单个文件删除成功返回true,否则返回false
	 */
	public boolean deleteFile(String fileName) {
		File file = new File(fileName);
		if (file.isFile() && file.exists()) {
			file.delete();
			System.out.println("删除单个文件" + fileName + "成功！");
			return true;
		} else {
			System.out.println("删除单个文件" + fileName + "失败！");
			return false;
		}
	}

	/**
	 * 删除目录（文件夹）以及目录下的文件
	 * 
	 * @param dir
	 *            被删除目录的文件路径
	 * @return 目录删除成功返回true,否则返回false
	 */
	public boolean deleteDirectory(String dir) {
		// 如果dir不以文件分隔符结尾，自动添加文件分隔符
		if (!dir.endsWith(File.separator)) {
			dir = dir + File.separator;
		}
		File dirFile = new File(dir);
		// 如果dir对应的文件不存在，或者不是一个目录，则退出
		if (!dirFile.exists() || !dirFile.isDirectory()) {
			System.out.println("删除目录失败" + dir + "目录不存在！");
			return false;
		}
		boolean flag = true;
		// 删除文件夹下的所有文件(包括子目录)
		File[] files = dirFile.listFiles();
		for (int i = 0; i < files.length; i++) {
			// 删除子文件
			if (files[i].isFile()) {
				flag = deleteFile(files[i].getAbsolutePath());
				if (!flag) {
					break;
				}
			}
			// 删除子目录
			else {
				flag = deleteDirectory(files[i].getAbsolutePath());
				if (!flag) {
					break;
				}
			}
		}

		if (!flag) {
			System.out.println("删除目录失败");
			return false;
		}

		// 删除当前目录
		if (dirFile.delete()) {
			System.out.println("删除目录" + dir + "成功！");
			return true;
		} else {
			System.out.println("删除目录" + dir + "失败！");
			return false;
		}
	}

	/**
	 * 根据文件名和文件路径创建文件的操作方法
	 * 
	 * @param filePath
	 *            文件路径
	 * @param fileName
	 *            文件名
	 * @param fileContent
	 *            文件内容
	 */
	public void createFile(String filePath, String fileName, String fileContent) {
		if (!filePath.endsWith(File.separator)) {
			filePath = filePath + File.separator;
		}
		File dirFile = new File(filePath);
		// 如果dir对应的文件不存在，或者不是一个目录，则退出
		if (!dirFile.exists() || !dirFile.isDirectory()) {
			System.out.println("创建文件失败" + dirFile + "目录不存在！");
			return;
		}

		File contentFile = new File(filePath + fileName);
		try {
			contentFile.createNewFile();
			FileWriter fw = new FileWriter(contentFile, true);
			BufferedWriter bw = new BufferedWriter(fw);
			bw.write(fileContent);
			bw.flush();
			bw.close();
			fw.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
